//http是node内置模块 可以直接来使用
const http = require('http');
const url = require('url');
//request(获取请求的信息) -> response(给浏览器写数据使用response)
//流：http内部是基于tcp的（net模块，socket双向通信）http1.1是一个半双工的（知识我问你答的模式）
//内部基于socket将其分割出了request response 底层实现还是要基于socket
//学http就是学header,还有解析请求，响应数据

//url由多部分组成
//http://username:password:www.zhufeng.com:80/a?a=1#aaa
//协议 权限 主机 端口号 查询路径 query 

//底层基于发布订阅的模式 koa express是对这些代码的封装
//底层用socket来通信，http会增肌一些header信息，请求来了之后需要在socket中读取数据
console.log(utl.parse('http://username:password:www.zhufeng.com:80/a?a=1#aaa'));
const server = http.createServer((req,res)=>{
    console.log(req.method);
    console.log(req.headers);//node请求头中都是小
    //post请求和put请求有请求体 req是可读流
    //大文件上传需要分片 或者客户端上传（一般几十K分一个包）
    let chunk= [];
    req.on("data",function (data) {//可读流 读取的数据都是buffer
        console.log(data);
        chunk.push(data);//以为内服务器
    })
    req.on('end',function () {//将浏览器发送的数据全部读取完毕
        console.log(Buffer.contact(chunk));
        console.log("获取请求体");
    });
    //响应状态码 可以字节设定一般不设定
    res.statusCode = 333;//更还浏览器响应的状态
    res.statusMessage = 'my define';
    //相应头 res就是一个可写流 open才会覆盖文件
    res.setHeader("MyHeader",1);
    //相应体(如果是路径 就把响应内容返回给页面，如果是ajax，则放到ajax的响应里)
    //自动会分段上传
    res.write('hello');
    res.end('ok1');//(必须有) 写完了=>write+close
});
server.on('request',function () {
    console.log('client come on');
})
server.listen(4000,function () {
    console.log('server start 4000');
});
//每次更新代码需要重启服务，才能运行最新代码
//nodemon（上线不用这个；命令行：开发式可以使用 监控文件变化 重新启动） pm2（线上） 管理实现重启
// npm install nodemon -g
//npm install http-server -g// 安装一个包 会在全局产生软链